Software deployment of complex server applications can be a painstaking process. Typically, such deployment begins with installing an operating system on a machine. Next, pre-requisite components are installed or enabled to support the installation of desired software applications. Next, the software applications are installed. Finally, the operating system can be configured to be optimized for the installed software applications (such as by shutting down services that are not needed by the applications). These operations can take a lot of time and effort on the part of the software customer. Additionally, because the deployment typically includes numerous operations that take place on the customer's hardware and software configuration, there is a risk that the installation will fail because it can involve many states and complex interactions between the states and computing components.
One way to address this problem is to deliver a pre-built appliance image. As used herein, an image is a software copy that includes all software needed to run on a physical or virtual machine and that reflects the state of such a machine. An appliance is a type of image that includes all the software needed to run on a physical or virtual machine, and that is designed to be used for one or more specific tasks or to address one or more specific problems. Updating an appliance to a new version typically still requires numerous operations to be performed during the update phase. This has the additional problem that the new version is not a “clean” installation—changes made throughout the operating system and applications in the software stack prior to the update are preserved during the update. Because the update does not start from a known state, there is an added risk of failure or undesired behavior after the update.